---
title: "Python 数据处理与自动化"
description: "从 JavaScript 开发者视角，学习 Python 在文件处理、正则表达式和数据分析（Pandas）方面的强大功能。"
---

## 1. 引言

### Python: 数据处理的瑞士军刀

虽然 JavaScript (特别是 Node.js) 能够处理文件和执行脚本，但 Python 在数据处理、科学计算和自动化任务方面拥有更强大、更成熟的生态系统。对于许多开发者来说，这正是他们学习 Python 的主要原因之一。

本模块将向你展示 Python 如何轻松应对各种数据处理挑战，从简单的文件 I/O 到复杂的数据分析。

**核心概念类比**

| Python | JavaScript | 主要功能 |
| --- | --- | --- |
| **内置文件操作** | `fs` 模块 | 文件读写 |
| **`pathlib`** | `path` 模块 | 跨平台路径操作 |
| **`re` 模块** | `RegExp` 对象 | 正则表达式 |
| **`pandas`** | `lodash`, `danfo.js` | 高性能数据分析 |
| **`csv` 模块** | `csv-parser`, `papaparse` | CSV 文件读写 |

> 💡 **学习策略**：将 Python 的这些工具视为你现有 JavaScript/Node.js 工作流的“超级升级版”。你会发现 Python 在处理结构化数据和大型数据集时更加得心应手。

## 2. 文件操作

Python 提供了非常简洁直观的文件操作语法。

### 2.1 读写文件

<PythonEditor title="文件读写对比" compare={true} canRun={false}>
```javascript !! js
// JavaScript (Node.js)
const fs = require('fs');

// 写文件
fs.writeFileSync('hello.txt', 'Hello from Node.js!');

// 读文件
const content = fs.readFileSync('hello.txt', 'utf8');
console.log(content);

// 异步读写
fs.writeFile('hello_async.txt', 'Async hello!', (err) => {
  if (err) throw err;
  fs.readFile('hello_async.txt', 'utf8', (err, data) => {
    if (err) throw err;
    console.log(data);
  });
});
```

```python !! py
# Python
# 写文件
with open("hello.txt", "w", encoding="utf-8") as f:
    f.write("Hello from Python!")

# 读文件
with open("hello.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

# pathlib (更现代的方式)
from pathlib import Path

Path("hello_pathlib.txt").write_text("Hello from Pathlib!", encoding="utf-8")
content_pathlib = Path("hello_pathlib.txt").read_text(encoding="utf-8")
print(content_pathlib)
```
</PythonEditor>

### 2.2 处理 JSON 文件

<PythonEditor title="JSON 文件处理对比" compare={true} canRun={false}>
```javascript !! js
// JavaScript
const data = { name: "Alice", age: 30 };

// 写入 JSON 文件
fs.writeFileSync('data.json', JSON.stringify(data, null, 2));

// 读取 JSON 文件
const rawData = fs.readFileSync('data.json');
const parsedData = JSON.parse(rawData);
console.log(parsedData.name); // Alice
```

```python !! py
# Python
import json

data = {"name": "Alice", "age": 30}

# 写入 JSON 文件
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, indent=2)

# 读取 JSON 文件
with open("data.json", "r", encoding="utf-8") as f:
    parsed_data = json.load(f)
    print(parsed_data["name"])  # Alice
```
</PythonEditor>

## 3. 正则表达式

Python 的 `re` 模块提供了强大的正则表达式功能。

<PythonEditor title="正则表达式对比" compare={true}>
```javascript !! js
// JavaScript
const text = "My email is test@example.com";
const regex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/;
const match = text.match(regex);
if (match) {
  console.log(match[0]); // test@example.com
}

// 替换
const newText = text.replace(/email/g, 'address');
console.log(newText); // My address is test@example.com
```

```python !! py
# Python
import re

text = "My email is test@example.com"
regex = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b"
match = re.search(regex, text);
if match:
    print(match.group(0))  # test@example.com

# 替换
new_text = re.sub(r"email", "address", text)
print(new_text)  # My address is test@example.com
```
</PythonEditor>

## 4. Pandas: Python 数据分析利器

`pandas` 是 Python 数据科学生态系统的核心库，它提供了 `DataFrame` 和 `Series` 两种强大的数据结构，使得数据清洗、转换、分析和可视化变得异常简单。

### 4.1 Series: 一维数据

`Series` 类似于一个带标签的数组。

<PythonEditor title="Pandas Series 基础" compare={true}>
```javascript !! js
// JavaScript (类似数组)
const data = [10, 20, 30, 40];
data.forEach(d => console.log(d));

const filteredData = data.filter(d => d > 20);
console.log(filteredData); // [30, 40]
```

```python !! py
# Python (Pandas Series)
import pandas as pd

data = pd.Series([10, 20, 30, 40])
print(data)

filtered_data = data[data > 20]
print(filtered_data)
```
</PythonEditor>

### 4.2 DataFrame: 二维数据

`DataFrame` 是 `pandas` 的核心，它是一个二维表格型数据结构，可以看作是 `Series` 的容器。

<PythonEditor title="Pandas DataFrame 基础" compare={true}>
```javascript !! js
// JavaScript (数组对象)
const users = [
  { name: 'Alice', age: 30, city: 'New York' },
  { name: 'Bob', age: 25, city: 'Paris' },
  { name: 'Charlie', age: 35, city: 'London' },
];

// 筛选
const youngUsers = users.filter(u => u.age < 30);
console.log(youngUsers);

// 添加新列
users.forEach(u => u.is_senior = u.age > 30);
console.log(users);
```

```python !! py
# Python (Pandas DataFrame)
import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [30, 25, 35],
    'city': ['New York', 'Paris', 'London']
}
df = pd.DataFrame(data)

# 筛选
young_users = df[df['age'] < 30]
print(young_users)

# 添加新列
df['is_senior'] = df['age'] > 30
print(df)
```
</PythonEditor>

### 4.3 从 CSV 读取数据

`pandas` 可以非常方便地从各种数据源（CSV, Excel, SQL 等）读取数据。

<PythonEditor title="从 CSV 读取数据对比" compare={true} canRun={false}>
```javascript !! js
// JavaScript (Node.js with csv-parser)
const fs = require('fs');
const csv = require('csv-parser');

const results = [];

fs.createReadStream('data.csv')
  .pipe(csv())
  .on('data', (data) => results.push(data))
  .on('end', () => {
    console.log(results);
  });
```

```python !! py
# Python (Pandas)
import pandas as pd

# 假设有一个 data.csv 文件
# name,age,city
# Alice,30,New York
# Bob,25,Paris

df = pd.read_csv("data.csv")
print(df)

# 对于非常大的文件，可以分块读取以节省内存
# chunk_iter = pd.read_csv("large_data.csv", chunksize=1000)
# for chunk in chunk_iter:
#     process(chunk)

# 数据分析示例
print("\nAverage age:", df["age"].mean())
print("\nUsers from New York:")
print(df[df["city"] == "New York"])
```
</PythonEditor>

## 5. 总结

Python 在数据处理和自动化方面的能力远不止于此，但本模块已经为你打下了坚实的基础。你现在已经了解了如何：

*   使用 Python 进行基本的文件操作。
*   利用 `re` 模块进行强大的文本匹配和处理。
*   使用 `pandas` 库进行高效的数据分析。

这些技能将为你打开一扇新的大门，让你能够利用 Python 解决各种复杂的数据问题，编写强大的自动化脚本。
